1
תגובות
Facades בלארוול 4
פתח
OrelBeY
,
הערה: למי שלא התנסה עם לארוול, לא מדובר כאן על דפוס העיצוב Facade, אלא על יישום מסוים שלו בלארוול.
הנה כמה (הרבה) קישורים כדי להתחיל:
- Facades בדוקומנטציה
- טיילור (מייסד לארוול) מדבר על Unit Testing עם IoC ו-Facades
- מאמר קצר שעוקב אחר Facades מאחורי הקלעים
- מאמר קצר שמסביר שלארוול 4 לא באמת משתמש בהרבה סטטיות
- תשובה ב-StackOverflow שמתייחסת לעניין הטוב והרע בסטטיות עם Facades
בתחילת הווידאו טיילור אמר שהוא יראה גם איך לא להשתמש ב-Facades "אם לא רוצים". בכמה מקומות אחרים ראיתי ביקורת על השימוש ב-Facades, בעוד שבהרבה מקומות אומרים שזה בסדר.
אני אישית לא רואה את הבעיה ב-Facades. נכון, אם משתמשים בזה יש לא מעט סטטיות בקוד, אבל בסופו של דבר יש מופע של מחלקה מאחורי זה. למה שמישהו יתנגד לשימוש בהם? עוד משהו, בקישור האחרון למעלה נאמר "please consider not using facades deep in your domain layer". מה זה Domain Layer ולמה?
לשם הבהרה, כל השורות הבאות יובילו לתוצאה זהה:
@intval אשמח לקבל תגובה ממך, בתור אחד שהפרק על סטטיות בספר שלו מתנגד לזה בחריצות. :-)
הנה כמה (הרבה) קישורים כדי להתחיל:
- Facades בדוקומנטציה
- טיילור (מייסד לארוול) מדבר על Unit Testing עם IoC ו-Facades
- מאמר קצר שעוקב אחר Facades מאחורי הקלעים
- מאמר קצר שמסביר שלארוול 4 לא באמת משתמש בהרבה סטטיות
- תשובה ב-StackOverflow שמתייחסת לעניין הטוב והרע בסטטיות עם Facades
בתחילת הווידאו טיילור אמר שהוא יראה גם איך לא להשתמש ב-Facades "אם לא רוצים". בכמה מקומות אחרים ראיתי ביקורת על השימוש ב-Facades, בעוד שבהרבה מקומות אומרים שזה בסדר.
אני אישית לא רואה את הבעיה ב-Facades. נכון, אם משתמשים בזה יש לא מעט סטטיות בקוד, אבל בסופו של דבר יש מופע של מחלקה מאחורי זה. למה שמישהו יתנגד לשימוש בהם? עוד משהו, בקישור האחרון למעלה נאמר "please consider not using facades deep in your domain layer". מה זה Domain Layer ולמה?
לשם הבהרה, כל השורות הבאות יובילו לתוצאה זהה:
Log::doSomething()->withFluentInterface(); // "Log" is registered in $app as an alias to the facade Illuminate\Support\Facades\Log
$app['log']->doSomething()->withFluentInterface(); // ArrayAccess
$app->make('log')->doSomething()->withFluentInterface(); // Using the IoC container directly
$app['log']->doSomething()->withFluentInterface(); // ArrayAccess
$app->make('log')->doSomething()->withFluentInterface(); // Using the IoC container directly
@intval אשמח לקבל תגובה ממך, בתור אחד שהפרק על סטטיות בספר שלו מתנגד לזה בחריצות. :-)
1 תשובות
שימוש ב facade כאן, או אפילו במשתנה $app יוצר אוטומטית תלויות בין הקוד שלך לבין הקוד של הפריימוורק ואני מאוד מתנגד לתלויות.
זה אומר שאין לך שוםדרך הגיונית לקחת את הקוד שלך ולעשות איתו משהו אחר הי פעם אם זה לא עובד על בסיס לארוול. זה נכון כאן לא רק במקרה של הפאסאד אלה גם במקרה של גישה דרך המשתנה הזה.
לטיילאר אין בעיה שתכתוב קוד מכאן ולעולם רק עם לאראוול, אבל אני נגד תלויות והדרך היחידה מבחינתי לעבוד עם לוגר בתוך מחלקה כלשהי זה ליצור תלות בין המחלקה לאינטרפייס של לוגר ולהעביר למופע של המחלקה מופע של לוגר בקונסטרקטור. לאראוול יודע לעשות גם את זה, אך לא באמצעות הפאסאד